/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package chess;

/**
 *
 * @author mauricio
 */

public class CheckJaque {

    
    public static boolean checkJaquePropio(int player, String[][] matriz){
        int n = 4;
        String alfil;
        String peon;
        String torre;
        String reina;
        String caballo;
        String rey;
        int xRey = 0, yRey = 0;
        if (player==1){
            for (int i = 0; i < n; i++){
                for (int j = 0; j < n; j++){
                    if (matriz[i][j].equals("K")){
                        xRey = i;
                        yRey = j;
                    }
                }
            }
            alfil = "b";
            peon = "p";
            torre = "r";
            reina = "q";
            caballo = "n";
            rey = "k";
        }
        else{
            for (int i = 0; i < n; i++){
                for (int j = 0; j < n; j++){
                    if (matriz[i][j].equals("k")){
                        xRey = i;
                        yRey = j;
                    }
                }
            }
            alfil = "B";
            peon = "P";
            torre = "R";
            reina = "Q";
            caballo = "N";
            rey = "K";
        }
        boolean hit = false;
        for (int i=1; xRey-i > -1 && yRey-i > -1; i++){
            if ((matriz[xRey-1][yRey-1].equals(peon) && rey.equals("K")) || matriz[xRey-1][yRey-1].equals(rey) || matriz[xRey-i][yRey-i].equals(alfil) || matriz[xRey-i][yRey-i].equals(reina)){
                hit = true;
            }
            else if (!matriz[xRey-i][yRey-i].equals("")){
                break;
            }
        }
        for (int i=1; xRey-i > -1 && yRey+i < n; i++){
            if ((matriz[xRey-1][yRey+1].equals(peon) && rey.equals("K")) || matriz[xRey-1][yRey+1].equals(rey) || matriz[xRey-i][yRey+i].equals(alfil) || matriz[xRey-i][yRey+i].equals(reina)){
                hit = true;
            }
            else if (!matriz[xRey-i][yRey+i].equals("")){
                break;
            }
        }
        for (int i=1; xRey+i < n && yRey-i > -1; i++){
            if ((matriz[xRey+1][yRey-1].equals(peon) && rey.equals("k")) || matriz[xRey+1][yRey-1].equals(rey) || matriz[xRey+i][yRey-i].equals(alfil) || matriz[xRey+i][yRey-i].equals(reina)){
                hit = true;
            }
            else if (!matriz[xRey+i][yRey-i].equals("")){
                break;
            }
        }
        for (int i=1; xRey+i < n && yRey+i < n; i++){
            if ((matriz[xRey+1][yRey+1].equals(peon) && rey.equals("k")) || matriz[xRey+1][yRey+1].equals(rey) || matriz[xRey+i][yRey+i].equals(alfil) || matriz[xRey+i][yRey+i].equals(reina)){
                hit = true;
            }
            else if (!matriz[xRey+i][yRey+i].equals("")){
                break;
            }
        }
        for (int i=1; xRey-i > -1; i++){
            if (matriz[xRey-1][yRey].equals(rey) || matriz[xRey-i][yRey].equals(torre) || matriz[xRey-i][yRey].equals(reina)){
                hit = true;
            }
            else if (!matriz[xRey-i][yRey].equals("")){
                break;
            }
        }
        for (int i=1; yRey+i < n; i++){
            if (matriz[xRey][yRey+1].equals(rey) || matriz[xRey][yRey+i].equals(torre) || matriz[xRey][yRey+i].equals(reina)){
                hit = true;
            }
            else if (!matriz[xRey][yRey+i].equals("")){
                break;
            }
        }
        for (int i=1; xRey+i < n; i++){
            if (matriz[xRey+1][yRey].equals(rey) || matriz[xRey+i][yRey].equals(torre) || matriz[xRey+i][yRey].equals(reina)){
                hit = true;
            }
            else if (!matriz[xRey+i][yRey].equals("")){
                break;
            }
        }
        for (int i=1; yRey-i > -1; i++){
            if (matriz[xRey][yRey-1].equals(rey) || matriz[xRey][yRey-i].equals(torre) || matriz[xRey][yRey-i].equals(reina)){
                hit = true;
            }
            else if (!matriz[xRey][yRey-i].equals("")){
                break;
            }
        }
        if (xRey+2 < n && yRey+1 < n && matriz[xRey+2][yRey+1].equals(caballo)){
            hit = true;
        }
        if (xRey+2 < n && yRey-1 > -1 && matriz[xRey+2][yRey-1].equals(caballo)){
            hit = true;
        }
        if (xRey-2 > -1 && yRey+1 < n && matriz[xRey-2][yRey+1].equals(caballo)){
            hit = true;
        }
        if (xRey-2 > -1 && yRey-1 > -1 && matriz[xRey-2][yRey-1].equals(caballo)){
            hit = true;
        }
        if (xRey+1 < n && yRey+2 < n && matriz[xRey+1][yRey+2].equals(caballo)){
            hit = true;
        }
        if (xRey+1 < n && yRey-2 > -1 && matriz[xRey+1][yRey-2].equals(caballo)){
            hit = true;
        }
        if (xRey-1 > -1 && yRey+2 < n && matriz[xRey-1][yRey+2].equals(caballo)){
            hit = true;
        }
        if (xRey-1 > -1 && yRey-2 > -1 && matriz[xRey-1][yRey-2].equals(caballo)){
            hit = true;
        }
        if (!hit){
            return false;
        }
        else{
            return true;
        }
    }
    
    public static boolean checkJaqueMate(int player, String[][] matriz){
        int n = 4;
        String alfil;
        String peon;
        String torre;
        String reina;
        String caballo;
        String rey;
        int xRey = 0, yRey = 0;
        if (player==1){
            for (int i = 0; i < n; i++){
                for (int j = 0; j < n; j++){
                    if (matriz[i][j].equals("K")){
                        xRey = i;
                        yRey = j;
                    }
                }
            }
            alfil = "b";
            peon = "p";
            torre = "r";
            reina = "q";
            caballo = "n";
            rey = "K";
        }
        else{
            for (int i = 0; i < n; i++){
                for (int j = 0; j < n; j++){
                    if (matriz[i][j].equals("k")){
                        xRey = i;
                        yRey = j;
                    }
                }
            }
            alfil = "B";
            peon = "P";
            torre = "R";
            reina = "Q";
            caballo = "N";
            rey = "k";
        }
        boolean mate = true;
        if (xRey-1 > -1 && yRey-1 > -1 && (matriz[xRey-1][yRey-1].equals("") || matriz[xRey-1][yRey-1].equals(alfil) || matriz[xRey-1][yRey-1].equals(peon) || 
                matriz[xRey-1][yRey-1].equals(torre) || matriz[xRey-1][yRey-1].equals(reina) || matriz[xRey-1][yRey-1].equals(caballo))){
            String[][] matriz2 = new String[n][n];
            for (int index=0; index<n; index++){
                System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
            }
            matriz2[xRey-1][yRey-1] = rey;
            matriz2[xRey][yRey] = "";
            if (!checkJaquePropio(player, matriz2)){
                mate = false;
            }
        }
        if (xRey-1 > -1 && yRey+1 < n && (matriz[xRey-1][yRey+1].equals("") || matriz[xRey-1][yRey+1].equals(alfil) || matriz[xRey-1][yRey+1].equals(peon) ||
                matriz[xRey-1][yRey+1].equals(torre) || matriz[xRey-1][yRey+1].equals(reina) || matriz[xRey-1][yRey+1].equals(caballo))){
            String[][] matriz2 = new String[n][n];
            for (int index=0; index<n; index++){
                System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
            }
            matriz2[xRey-1][yRey+1] = rey;
            matriz2[xRey][yRey] = "";
            if (!checkJaquePropio(player, matriz2)){
                mate = false;
            }
        }
        if (yRey-1 > -1 && (matriz[xRey][yRey-1].equals("") || matriz[xRey][yRey-1].equals(alfil) || matriz[xRey][yRey-1].equals(peon) || 
                matriz[xRey][yRey-1].equals(torre) || matriz[xRey][yRey-1].equals(reina) || matriz[xRey][yRey-1].equals(caballo))){
            String[][] matriz2 = new String[n][n];
            for (int index=0; index<n; index++){
                System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
            }
            matriz2[xRey][yRey-1] = rey;
            matriz2[xRey][yRey] = "";
            if (!checkJaquePropio(player, matriz2)){
                mate = false;
            }
        }
        if (xRey+1 < n && yRey-1 > -1 && (matriz[xRey+1][yRey-1].equals("") || matriz[xRey+1][yRey-1].equals(alfil) || matriz[xRey+1][yRey-1].equals(peon) ||
                matriz[xRey+1][yRey-1].equals(torre) || matriz[xRey+1][yRey-1].equals(reina) || matriz[xRey+1][yRey-1].equals(caballo))){
            String[][] matriz2 = new String[n][n];
            for (int index=0; index<n; index++){
                System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
            }
            matriz2[xRey+1][yRey-1] = rey;
            matriz2[xRey][yRey] = "";
            if (!checkJaquePropio(player, matriz2)){
                mate = false;
            }
        }
        if (xRey+1 < n && (matriz[xRey+1][yRey].equals("") || matriz[xRey+1][yRey].equals(alfil) || matriz[xRey+1][yRey].equals(peon) ||
                matriz[xRey+1][yRey].equals(torre) || matriz[xRey+1][yRey].equals(reina) || matriz[xRey+1][yRey].equals(caballo))){
            String[][] matriz2 = new String[n][n];
            for (int index=0; index<n; index++){
                System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
            }
            matriz2[xRey+1][yRey] = rey;
            matriz2[xRey][yRey] = "";
            if (!checkJaquePropio(player, matriz2)){
                mate = false;
            }
        }
        if (xRey-1 > -1 && (matriz[xRey-1][yRey].equals("") || matriz[xRey-1][yRey].equals(alfil) || matriz[xRey-1][yRey].equals(peon) || 
                matriz[xRey-1][yRey].equals(torre) || matriz[xRey-1][yRey].equals(reina) || matriz[xRey-1][yRey].equals(caballo))){
            String[][] matriz2 = new String[n][n];
            for (int index=0; index<n; index++){
                System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
            }
            matriz2[xRey-1][yRey] = rey;
            matriz2[xRey][yRey] = "";
            if (!checkJaquePropio(player, matriz2)){
                mate = false;
            }
        }
        if (xRey+1 < n && yRey+1 < n && (matriz[xRey+1][yRey+1].equals("") || matriz[xRey+1][yRey+1].equals(alfil) || matriz[xRey+1][yRey+1].equals(peon) ||
                matriz[xRey+1][yRey+1].equals(torre) || matriz[xRey+1][yRey+1].equals(reina) || matriz[xRey+1][yRey+1].equals(caballo))){
            String[][] matriz2 = new String[n][n];
            for (int index=0; index<n; index++){
                System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
            }
            matriz2[xRey+1][yRey+1] = rey;
            matriz2[xRey][yRey] = "";
            if (!checkJaquePropio(player, matriz2)){
                mate = false;
            }
        }
        if (yRey+1 < n && (matriz[xRey][yRey+1].equals("") || matriz[xRey][yRey+1].equals(alfil) || matriz[xRey][yRey+1].equals(peon) ||
                matriz[xRey][yRey+1].equals(torre) || matriz[xRey][yRey+1].equals(reina) || matriz[xRey][yRey+1].equals(caballo))){
            String[][] matriz2 = new String[n][n];
            for (int index=0; index<n; index++){
                System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
            }
            matriz2[xRey][yRey+1] = rey;
            matriz2[xRey][yRey] = "";
            if (!checkJaquePropio(player, matriz2)){
                mate = false;
            }
        }
        if (!mate){
            return false;
        }
        else{
            int xMate = -1;
            int yMate = -1;
            if (xRey+2 < n && yRey+1 < n && matriz[xRey+2][yRey+1].equals(caballo)){
                xMate = xRey+2;
                yMate = yRey+1;
            }
            else if (xRey+2 < n && yRey-1 > -1 && matriz[xRey+2][yRey-1].equals(caballo)){
                xMate = xRey+2;
                yMate = yRey-1;
            }
            else if (xRey-2 > -1 && yRey+1 < n && matriz[xRey-2][yRey+1].equals(caballo)){
                xMate = xRey-2;
                yMate = yRey+1;
            }
            else if (xRey-2 > -1 && yRey-1 > -1 && matriz[xRey-2][yRey-1].equals(caballo)){
                xMate = xRey-2;
                yMate = yRey-1;
            }
            else if (xRey+1 < n && yRey+2 < n && matriz[xRey+1][yRey+2].equals(caballo)){
                xMate = xRey+1;
                yMate = yRey+2;
            }
            else if (xRey+1 < n && yRey-2 > -1 && matriz[xRey+1][yRey-2].equals(caballo)){
                xMate = xRey+1;
                yMate = yRey-2;
            }
            else if (xRey-1 > -1 && yRey+2 < n && matriz[xRey-1][yRey+2].equals(caballo)){
                xMate = xRey-1;
                yMate = yRey+2;
            }
            else if (xRey-1 > -1 && yRey-2 > -1 && matriz[xRey-1][yRey-2].equals(caballo)){
                xMate = xRey-1;
                yMate = yRey-2;
            }
            else {
                for (int i=1; xMate==-1 && xRey-i > -1 && yRey-i > -1; i++){
                    if ((matriz[xRey-1][yRey-1].equals(peon) && rey.equals("k")) || matriz[xRey-1][yRey-1].equals(rey) || matriz[xRey-i][yRey-i].equals(alfil) || matriz[xRey-i][yRey-i].equals(reina)){
                        xMate = xRey-i;
                        yMate = yRey-i;
                        break;
                    }
                    else if (!matriz[xRey-i][yRey-i].equals("")){
                        break;
                    }
                }
                for (int i=1; xMate==-1 && xRey-i > -1 && yRey+i < n; i++){
                    if ((matriz[xRey-1][yRey+1].equals(peon) && rey.equals("k")) || matriz[xRey-1][yRey+1].equals(rey) || matriz[xRey-i][yRey+i].equals(alfil) || matriz[xRey-i][yRey+i].equals(reina)){
                        xMate = xRey-i;
                        yMate = yRey+i;
                        break;
                    }
                    else if (!matriz[xRey-i][yRey+i].equals("")){
                        break;
                    }
                }
                for (int i=1; xMate==-1 && xRey+i < n && yRey-i > -1; i++){
                    if ((matriz[xRey+1][yRey-1].equals(peon) && rey.equals("K")) || matriz[xRey+1][yRey-1].equals(rey) || matriz[xRey+i][yRey-i].equals(alfil) || matriz[xRey+i][yRey-i].equals(reina)){
                        xMate = xRey+i;
                        yMate = yRey-i;
                        break;
                    }
                    else if (!matriz[xRey+i][yRey-i].equals("")){
                        break;
                    }
                }
                for (int i=1; xMate==-1 && xRey+i < n && yRey+i < n; i++){
                    if ((matriz[xRey+1][yRey+1].equals(peon) && rey.equals("K")) || matriz[xRey+1][yRey+1].equals(rey) || matriz[xRey+i][yRey+i].equals(alfil) || matriz[xRey+i][yRey+i].equals(reina)){
                        xMate = xRey+i;
                        yMate = yRey+i;
                        break;
                    }
                    else if (!matriz[xRey+i][yRey+i].equals("")){
                        break;
                    }
                }
                for (int i=1; xMate==-1 && xRey-i > -1; i++){
                    if (matriz[xRey-1][yRey].equals(rey) || matriz[xRey-i][yRey].equals(torre) || matriz[xRey-i][yRey].equals(reina)){
                        xMate = xRey-i;
                        yMate = yRey;
                        break;
                    }
                    else if (!matriz[xRey-i][yRey].equals("")){
                        break;
                    }
                }
                for (int i=1; xMate==-1 && yRey+i < n; i++){
                    if (matriz[xRey][yRey+1].equals(rey) || matriz[xRey][yRey+i].equals(torre) || matriz[xRey][yRey+i].equals(reina)){
                        xMate = xRey;
                        yMate = yRey+i;
                        break;
                    }
                    else if (!matriz[xRey][yRey+i].equals("")){
                        break;
                    }
                }
                for (int i=1; xMate==-1 && xRey+i < n; i++){
                    if (matriz[xRey+1][yRey].equals(rey) || matriz[xRey+i][yRey].equals(torre) || matriz[xRey+i][yRey].equals(reina)){
                        xMate = xRey+i;
                        yMate = yRey;
                        break;
                    }
                    else if (!matriz[xRey+i][yRey].equals("")){
                        break;
                    }
                }
                for (int i=1; xMate==-1 && yRey-i > -1; i++){
                    if (matriz[xRey][yRey-1].equals(rey) || matriz[xRey][yRey-i].equals(torre) || matriz[xRey][yRey-i].equals(reina)){
                        xMate = xRey;
                        yMate = yRey+i;
                        break;
                    }
                    else if (!matriz[xRey][yRey-i].equals("")){
                        break;
                    }
                }
            }
            if (player==1){
                alfil = "B";
                peon = "P";
                torre = "R";
                reina = "Q";
                caballo = "N";
            }
            else{
                alfil = "b";
                peon = "p";
                torre = "r";
                reina = "q";
                caballo = "n";
            }
            for (int i=1; xMate-i > -1 && yMate-i > -1; i++){
                if ((matriz[xMate-1][yMate-1].equals(peon) && reina.equals("Q")) || matriz[xMate-1][yMate-1].equals(rey) || matriz[xMate-i][yMate-i].equals(alfil) || matriz[xMate-i][yMate-i].equals(reina)){
                    String[][] matriz2 = new String[n][n];
                    for (int index=0; index<n; index++){
                        System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                    }
                    matriz2[xMate][yMate] = matriz2[xMate-i][yMate-i];
                    matriz2[xMate-i][yMate-i] = "";
                    if (!checkJaquePropio(player, matriz2)){
                        mate = false;
                    }
                    break;
                }
                else if (!matriz[xMate-i][yMate-i].equals("")){
                    break;
                }
            }
            for (int i=1; xMate-i > -1 && yMate+i < n; i++){
                if ((matriz[xMate-1][yMate+1].equals(peon) && reina.equals("Q")) || matriz[xMate-1][yMate+1].equals(rey) || matriz[xMate-i][yMate+i].equals(alfil) || matriz[xMate-i][yMate+i].equals(reina)){
                    String[][] matriz2 = new String[n][n];
                    for (int index=0; index<n; index++){
                        System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                    }
                    matriz2[xMate][yMate] = matriz2[xMate-i][yMate+i];
                    matriz2[xMate-i][yMate+i] = "";
                    if (!checkJaquePropio(player, matriz2)){
                        mate = false;
                    }
                    break;
                }
                else if (!matriz[xMate-i][yMate+i].equals("")){
                    break;
                }
            }
            for (int i=1; xMate+i < n && yMate-i > -1; i++){
                if ((matriz[xMate+1][yMate-1].equals(peon) && reina.equals("k")) || matriz[xMate+1][yMate-1].equals(rey) || matriz[xMate+i][yMate-i].equals(alfil) || matriz[xMate+i][yMate-i].equals(reina)){
                    String[][] matriz2 = new String[n][n];
                    for (int index=0; index<n; index++){
                        System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                    }
                    matriz2[xMate][yMate] = matriz2[xMate+i][yMate-i];
                    matriz2[xMate+i][yMate-i] = "";
                    if (!checkJaquePropio(player, matriz2)){
                        mate = false;
                    }
                    break;
                }
                else if (!matriz[xMate+i][yMate-i].equals("")){
                    break;
                }
            }
            for (int i=1; xMate+i < n && yMate+i < n; i++){
                if ((matriz[xMate+1][yMate+1].equals(peon) && reina.equals("k")) || matriz[xMate+1][yMate+1].equals(rey) || matriz[xMate+i][yMate+i].equals(alfil) || matriz[xMate+i][yMate+i].equals(reina)){
                    String[][] matriz2 = new String[n][n];
                    for (int index=0; index<n; index++){
                        System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                    }
                    matriz2[xMate][yMate] = matriz2[xMate+i][yMate+i];
                    matriz2[xMate+i][yMate+i] = "";
                    if (!checkJaquePropio(player, matriz2)){
                        mate = false;
                    }
                    break;
                }
                else if (!matriz[xMate+i][yMate+i].equals("")){
                    break;
                }
            }
            for (int i=1; xMate-i > -1; i++){
                if (matriz[xMate-1][yMate].equals(rey) || matriz[xMate-i][yMate].equals(torre) || matriz[xMate-i][yMate].equals(reina)){
                    String[][] matriz2 = new String[n][n];
                    for (int index=0; index<n; index++){
                        System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                    }
                    matriz2[xMate][yMate] = matriz2[xMate-i][yMate];
                    matriz2[xMate-i][yMate] = "";
                    if (!checkJaquePropio(player, matriz2)){
                        mate = false;
                    }
                    break;
                }
                else if (!matriz[xMate-i][yMate].equals("")){
                    break;
                }
            }
            for (int i=1; yMate+i < n; i++){
                if (matriz[xMate][yMate+1].equals(rey) || matriz[xMate][yMate+i].equals(torre) || matriz[xMate][yMate+i].equals(reina)){
                    String[][] matriz2 = new String[n][n];
                    for (int index=0; index<n; index++){
                        System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                    }
                    matriz2[xMate][yMate] = matriz2[xMate][yMate+i];
                    matriz2[xMate][yMate+i] = "";
                    if (!checkJaquePropio(player, matriz2)){
                        mate = false;
                    }
                    break;
                }
                else if (!matriz[xMate][yMate+i].equals("")){
                    break;
                }
            }
            for (int i=1; xMate+i < n; i++){
                if (matriz[xMate+1][yMate].equals(rey) || matriz[xMate+i][yMate].equals(torre) || matriz[xMate+i][yMate].equals(reina)){
                    String[][] matriz2 = new String[n][n];
                    for (int index=0; index<n; index++){
                        System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                    }
                    matriz2[xMate][yMate] = matriz2[xMate+i][yMate];
                    matriz2[xMate+i][yMate] = "";
                    if (!checkJaquePropio(player, matriz2)){
                        mate = false;
                    }
                    break;
                }
                else if (!matriz[xMate+i][yMate].equals("")){
                    break;
                }
            }
            for (int i=1; yMate-i > -1; i++){
                if (matriz[xMate][yMate-1].equals(rey) || matriz[xMate][yMate-i].equals(torre) || matriz[xMate][yMate-i].equals(reina)){
                    String[][] matriz2 = new String[n][n];
                    for (int index=0; index<n; index++){
                        System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                    }
                    matriz2[xMate][yMate] = matriz2[xMate][yMate-i];
                    matriz2[xMate][yMate-i] = "";
                    if (!checkJaquePropio(player, matriz2)){
                        mate = false;
                    }
                    break;
                }
                else if (!matriz[xMate][yMate-i].equals("")){
                    break;
                }
            }
            if (xMate+2 < n && yMate+1 < n && matriz[xMate+2][yMate+1].equals(caballo)){
                String[][] matriz2 = new String[n][n];
                for (int index=0; index<n; index++){
                    System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                }
                matriz2[xMate][yMate] = matriz2[xMate+2][yMate+1];
                matriz2[xMate+2][yMate+1] = "";
                if (!checkJaquePropio(player, matriz2)){
                    mate = false;
                }
            }
            if (xMate+2 < n && yMate-1 > -1 && matriz[xMate+2][yMate-1].equals(caballo)){
                String[][] matriz2 = new String[n][n];
                for (int index=0; index<n; index++){
                    System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                }
                matriz2[xMate][yMate] = matriz2[xMate+2][yMate-1];
                matriz2[xMate+2][yMate-1] = "";
                if (!checkJaquePropio(player, matriz2)){
                    mate = false;
                }
            }
            if (xMate-2 > -1 && yMate+1 < n && matriz[xMate-2][yMate+1].equals(caballo)){
                String[][] matriz2 = new String[n][n];
                for (int index=0; index<n; index++){
                    System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                }
                matriz2[xMate][yMate] = matriz2[xMate-2][yMate+1];
                matriz2[xMate-2][yMate+1] = "";
                if (!checkJaquePropio(player, matriz2)){
                    mate = false;
                }
            }
            if (xMate-2 > -1 && yMate-1 > -1 && matriz[xMate-2][yMate-1].equals(caballo)){
                String[][] matriz2 = new String[n][n];
                for (int index=0; index<n; index++){
                    System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                }
                matriz2[xMate][yMate] = matriz2[xMate-2][yMate-1];
                matriz2[xMate-2][yMate-1] = "";
                if (!checkJaquePropio(player, matriz2)){
                    mate = false;
                }
            }
            if (xMate+1 < n && yMate+2 < n && matriz[xMate+1][yMate+2].equals(caballo)){
                String[][] matriz2 = new String[n][n];
                for (int index=0; index<n; index++){
                    System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                }
                matriz2[xMate][yMate] = matriz2[xMate+1][yMate+2];
                matriz2[xMate+1][yMate+2] = "";
                if (!checkJaquePropio(player, matriz2)){
                    mate = false;
                }
            }
            if (xMate+1 < n && yMate-2 > -1 && matriz[xMate+1][yMate-2].equals(caballo)){
                String[][] matriz2 = new String[n][n];
                for (int index=0; index<n; index++){
                    System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                }
                matriz2[xMate][yMate] = matriz2[xMate+1][yMate-2];
                matriz2[xMate+1][yMate-2] = "";
                if (!checkJaquePropio(player, matriz2)){
                    mate = false;
                }
            }
            if (xMate-1 > -1 && yMate+2 < n && matriz[xMate-1][yMate+2].equals(caballo)){
                String[][] matriz2 = new String[n][n];
                for (int index=0; index<n; index++){
                    System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                }
                matriz2[xMate][yMate] = matriz2[xMate-1][yMate+2];
                matriz2[xMate-1][yMate+2] = "";
                if (!checkJaquePropio(player, matriz2)){
                    mate = false;
                }
            }
            if (xMate-1 > -1 && yMate-2 > -1 && matriz[xMate-1][yMate-2].equals(caballo)){
                String[][] matriz2 = new String[n][n];
                for (int index=0; index<n; index++){
                    System.arraycopy(matriz[index], 0, matriz2[index], 0, matriz[index].length);
                }
                matriz2[xMate][yMate] = matriz2[xMate-1][yMate-2];
                matriz2[xMate-1][yMate-2] = "";
                if (!checkJaquePropio(player, matriz2)){
                    mate = false;
                }
            }
            return mate;
        }
    }
}
